package base.jdk8_demo.date;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Month;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;

import org.junit.Test;

/**
 * jdk8 中日期使用
 */
public class Demo01 {


    /**
     * 本地化日期时间案例
     *
     * currentTime = LocalDateTime.now()
     * LocalDate date =currentTime.toLocalDate()
     * date = LocalDate.of(2021, 6, 19)
     * date = LocalDate.parse("2021-06-19")
     * date = LocalDate.from(currentTime)
     * date = LocalDate.ofYearDay(2021, 365)
     * date = date.withYear(2021).withMonth(6).withDayOfMonth(19)
     *
     *
     * Period.between(targetDay, nowDay).getMonths()
     * Duration.between(time2, time1).getSeconds()
     * Duration.between(targetDay, nowDay).toHours()
     *
     *
     */
    @Test
    public void test1() {
        // 获取当前日期时间对象
        LocalDateTime currentTime = LocalDateTime.now();
        System.out.println(currentTime);
        System.out.println(new Date());
        System.out.println(LocalDate.from(currentTime));

        LocalDate date1 = currentTime.toLocalDate();
        LocalTime time1 = currentTime.toLocalTime();

        System.out.println("日期 = "+date1);
        System.out.println("时间 = "+ time1);
        // 获取当前日期或时间对象
        LocalDate dateNow = LocalDate.now();
        LocalTime timeNow = LocalTime.now();
        System.out.println("dateNow = " + dateNow);
        System.out.println("timeNow = " + timeNow);

        // 获取当前日期时间的年/月/日/时/分/秒
        int year = currentTime.getYear();
        int monthInt = currentTime.getMonthValue();
        int day = currentTime.getDayOfMonth();
        int hour = currentTime.getHour();
        int minute = currentTime.getMinute();
        int seconds = currentTime.getSecond();
        int nano = currentTime.getNano();
        // 2020年，7月，14日，15时，55分，53秒，14000000纳秒
        System.out.println(year+"年，"+monthInt+"月，"+day+ "日，"+hour+ "时，"+minute+ "分，"+seconds+ "秒，"+nano+ "纳秒");


        // 构造指定日期时间对象
        LocalDateTime date2 = currentTime.withYear(2021).withMonth(6).withDayOfMonth(10).withHour(10).withMinute(15).withSecond(20);
        // 指定的日期时间：= 2021-06-10T10:15:20.014
        System.out.println("指定的日期时间：= "+date2);
        date2 = LocalDateTime.of(2021, 12, 12, 10, 10, 10);
        System.out.println("指定的日期时间2：= "+date2);

        // 构造指定日期对象
        LocalDate date3 = LocalDate.of(2022, 10, 20);
        // 指定的日期：2022-10-20
        System.out.println("指定的日期："+date3);

        // 构造指定时间对象
        LocalTime date4 = LocalTime.of(14, 10, 42);
        // 指定的时间：14:10:42
        System.out.println("指定的时间："+date4);

        // 从字符串中解析日期
        LocalDate date5 = LocalDate.parse("2022-02-20");
        // 解析指定日期：2022-02-20
        System.out.println("解析指定日期："+date5);

        // 从字符串中解析时间
        LocalTime date6 = LocalTime.parse("22:20:15");
        // 解析指定时间：22:20:15
        System.out.println("解析指定时间："+date6);

        // 某年的第x天是几月几号
        LocalDate date = LocalDate.ofYearDay(2021, 365);//2021年的第365天日期是多少
        System.out.println(date);//2021-12-31
    }


    /**
     * 带时区的日期时间对象
     */
    @Test
    public void test2() {
        ZonedDateTime zdt = ZonedDateTime.now();
        // 当前时区日期时间是：2020-07-14T15:48:53.446+08:00[Asia/Shanghai]
        System.out.println("当前时区日期时间是："+zdt);

        ZoneId id = ZoneId.of("Europe/Paris");
        System.out.println("ZoneId: "+id);

        ZoneId currentZone = ZoneId.systemDefault();
        System.out.println("系统默认时区："+currentZone);

    }
}
